package com.dxg.msns.favor.service.impl;

import com.dxg.msns.favor.client.MusicClient;
import com.dxg.msns.favor.mapper.MusicFavorMapper;
import com.dxg.msns.favor.pojo.MusicFavor;
import com.dxg.msns.favor.service.MusicFavorService;
import com.dxg.msns.music.pojo.Music;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Service
public class MusicFavorServiceImpl implements MusicFavorService {
    @Autowired
    private MusicFavorMapper musicFavorMapper;

    @Autowired
    private MusicClient musicClient;

    /**
     * 查询用户搜藏音乐的总数
     *
     * @param uid
     * @return
     */
    @Override
    public Integer queryCountByUid(String uid) {
        // 获取用户收藏的音乐列表
        List<Music> musicList = queryByUid(uid);

        // 返回列表的大小（即收藏数量）
        return musicList != null ? musicList.size() : 0;
    }

    /**
     * 查询用户搜藏音乐的总数
     * @return
     */
    @Override
    public Integer queryCountByMusicId(String musicId) {
        // 获取用户收藏的音乐列表
        int count= musicFavorMapper.queryByMusicId(musicId);
        // 返回列表的大小（即收藏数量）
        return count;
    }

    /**
     * 根据用户id查询该用户收藏音乐的id
     *
     * @param uid
     * @return
     */
    @Override
    public List<Music> queryByUid(String uid) {
        // 1. 查询用户收藏的音乐 ID 列表
        List<String> musicIds = musicFavorMapper.queryByUid(uid);

        // 2. 若无收藏，返回空列表
        if (musicIds == null || musicIds.isEmpty()) {
            return new ArrayList<>();
        }

        // 3. 创建一个列表存放音乐详情
        List<Music> musicList = new ArrayList<>();

        // 4. 遍历 ID 列表，逐个调用远程接口查询音乐详情
        for (String musicId : musicIds) {
            Music music = musicClient.queryMusicByMusicId(musicId);
            if (music != null) {
                musicList.add(music);
            }
        }

        // 5. 返回音乐详情列表
        return musicList;
    }




    /**
     * 删除收藏
     *
     * @param musicFavor
     */
    @Override
    public void deleteFavor(MusicFavor musicFavor) {
        // 使用 Mapper 直接更新操作
        musicFavorMapper.updateStatusByCollectorIdAndMusicId(musicFavor.getCollectorId(), musicFavor.getMusicId(), 0);
    }



    public String addFavor(MusicFavor musicFavor) {
        Date date = new Date();
        musicFavor.setFavorDate(date); // 设置收藏日期
        musicFavor.setFavorStatus(1);  // 设置为收藏状态

        try {
            // 检查是否已经收藏该音乐
            int count = musicFavorMapper.countByCollectorIdAndMusicId(musicFavor.getCollectorId(), musicFavor.getMusicId());

            if (count == 0) {
                // 没有收藏过，插入新记录
                int rowsAffected = musicFavorMapper.insert(musicFavor);
                return rowsAffected > 0 ? "收藏成功" : "收藏失败";
            } else {
                // 已经收藏过，查询原记录
                MusicFavor existingFavor = musicFavorMapper.selectByCollectorIdAndMusicId(musicFavor.getCollectorId(), musicFavor.getMusicId());

                if (existingFavor != null) {
                    Integer favorStatus = existingFavor.getFavorStatus();

                    if (favorStatus == null || favorStatus == 0) {
                        // 原状态为未收藏，更新为收藏状态
                        int rowsAffected = musicFavorMapper.updateStatusByCollectorIdAndMusicId(
                                musicFavor.getCollectorId(), musicFavor.getMusicId(), 1);
                        return rowsAffected > 0 ? "重新收藏成功" : "更新收藏状态失败";
                    } else {
                        return "已收藏，无需重复操作";
                    }
                } else {
                    // 理论上不会走到这里，加个兜底逻辑
                    int rowsAffected = musicFavorMapper.insert(musicFavor);
                    return rowsAffected > 0 ? "收藏成功" : "收藏失败";
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return "发生异常：" + e.getMessage();
        }
    }

    @Override
    public Integer queryFavorStatus(String userId, String musicId) {
        // 调用 Mapper 查询用户是否收藏某首音乐，若没有记录则返回 0
        return musicFavorMapper.queryFavorStatus(userId, musicId);
    }


}
